import { TAG_TYPE, YEAR_INSPECT } from '@/constant/enums';
import { unknownType } from '@/utils/types';
import _ from 'lodash-es';
import dayjs from 'dayjs';
import { showToast } from '@/utils/messageTip';
import { getStorage } from '@/utils/uni-storage';

/**
 * 当前环境
 */
export const ENV = import.meta.env.MODE;

/**
 * 页面传参函数名称
 */
export const TRANS_DATA_EVENT_NAME = 'transformDataFromPage';

/**
 * 上传路径
 */
export const UPLOAD_URL = getStorage('baseUrl')
    ? `${getStorage('baseUrl')}/api/upload`
    : `${import.meta.env.VITE_API_URL}/api/upload`;

/**
 * 订单完成状态
 */
export const ORDER_STATUS = {
    /** 未完成 */
    INCOMPLETE: 1,
    /** 已完成 */
    COMPLETED: 2,
};

/**
 * 批次检测状态
 */
export const BATCH_INSPECT_STATUS = {
    /** 正常 */
    NORMAL: 1,
    /** 异常 */
    EXCEPTION: 2,
};

/**
 * 领用状态
 */
export const CONSUMING_STATUS = {
    /** 未完成 */
    INCOMPLETE: 1,
    /** 已完成 */
    COMPLETED: 2,
};

/**
 * 阶段状态
 * @type {{
 * P_SCTOL: string,
 * P_THRC: string,
 * P_WXRC: string,
 * P_WXCC: string,
 * P_HPRC: string,
 * P_NJCC: string,
 * P_CPCK: string,
 * P_CPBZ: string,
 * P_GPCL: string,
 * P_NJRC: string,
 * P_XPRC: string
 * }}
 */
export const PHASE_TYPE = {
    // 投料前录入
    P_TLQLR: 'tlqlr',

    // 投料后录入
    P_TLHLR: 'tlhlr',

    // 充前检查
    P_CQJC: 'cqjc',

    // 充后检查
    P_CHJC: 'chjc',

    // 充前登记
    P_CQDJ: 'cqdj',

    // 充后登记
    P_CHDJ: 'chdj',

    // 物料回收
    P_WLHS: 'wlhs',

    // 新瓶入库
    P_XPRK: 'xprk',

    // 返回空瓶入库
    P_FHKPRK: 'fhkprk',

    // 外送探伤入库
    P_WSTSRK: 'wstsrk',

    // 外送处理入库
    P_WSCLRK: 'wsclrk',

    // 采购入厂
    P_CGRC: 'cgrc',

    // 采购入库
    P_CGRK: 'cgrk',

    // 试漏数据录入
    P_SCWLRKQJY: 'scwlrkqjy',

    // 生产物料入库
    P_SCWLRK: 'scwlrk',

    // 空瓶生产领用出库
    P_KPSCLY: 'kpscly',

    // 物料领用出库
    P_WLLYCK: 'wllyck',

    // 物料采购退货
    P_WLCGTH: 'wlcgth',

    // 空瓶其他领用出库
    P_KPQTCK: 'kpqtck',

    // 返回客供出库
    P_FHKGCK: 'fhkgck',

    // 外送探伤出库
    P_WSTSCK: 'wstsck',

    // 外送处理出库
    P_WSCLCK: 'wsclck',

    // 备货点检
    P_BHDJ: 'bhdj',

    // 空瓶报检
    P_KPBJ: 'kpbj',

    // 物料报检
    P_WLBJ: 'wlbj',

    // 采购物料报检
    P_CGWLBJ: 'cgwlbj',

    // 轻组分报检
    P_QZFBJ: 'qzfbj',

    // 返回出库
    P_FHCK: 'fhck',

    // 客户退货入库
    P_KHTHRK: 'khthrk',

    // 其他物料入库
    P_QTWLRK: 'qtwlrk',

    // 其它物料出库
    P_QTWLCK: 'qtwlck',

    // *******************气瓶*********************
    // 气瓶装换阀
    P_QPZHF: 'qpzhf',

    // 装换阀试漏
    P_ZHFSL: 'zhfsl',

    // 新瓶烘干处理
    P_XPHGCL: 'xphgcl',

    // 新瓶烘干钝化处理
    P_XPHGDHCL: 'xphgdhcl',

    // 新瓶钝化处理
    P_XPDHCL: 'xpdhcl',

    // 循环瓶烘干处理
    P_XHPHGCL: 'xhphgcl',

    // 其他烘干处理
    P_QTHGCL: 'qthgcl',

    // 水压站接收
    P_SYZJS: 'syzjs',

    // 水压站确认
    P_SYZQR: 'syzqr',

    // 充装前抽空置换
    P_CZQCKZH: 'czqckzh',

    // 其他抽空置换
    P_QTCKZH: 'qtckzh',
};

/**
 * 当前步骤
 * @type {{
 * S_TLQLR: string,
 * }}
 */
export const STEP_TYPE = {
    // 投料前
    S_TLQLR: 'tlqlr',

    // 投料后
    S_TLHLR: 'tlhlr',

    // 充装中
    S_CZZ: 'czz',

    // 待充前登记
    S_DCQDJ: 'dcqdj',

    // 待充后检查
    S_DCHJC: 'dchjc',

    // 待生产成品分析
    S_DSCCPFX: 'dsccpfx',

    // 汇出前录入
    S_HCQLR: 'hcqlr',

    // 汇出后录入
    S_HCHLR: 'hchlr',

    // 汇入前录入
    S_HRQLR: 'hrqlr',

    // 汇入后录入
    S_HRHLR: 'hrhlr',

    // 在库
    S_ZK: 'zk',

    // 报检中
    S_BJZ: 'bjz',

    // 待采购入库
    S_DCGRK: 'dcgrk',

    // 生产物料入库中
    S_SCWLRKSLZ: 'scwlrkslz',

    // 车间待用（空瓶）
    S_CJDYKP: 'cjdykp',

    S_CDJS: 'djs',

    // 已返回客供
    S_YFHKG: 'yfhkg',

    // 在外探伤中
    S_ZWTSZ: 'zwtsz',

    // 在外探伤中
    S_ZWCLZ: 'zwclz',

    // 已退货
    S_YRH: 'yth',

    // 车间待用
    S_CJDYWL: 'cjdywl',

    S_YFH: 'yfh',

    // *******************气瓶*********************
    // 待试漏
    S_DSL: 'dsl',
    // 试漏中
    S_SLZ: 'slz',
    //烘干处理
    S_HGCL: 'hgcl',
    //钝化前处理
    S_DHQCL: 'dhqcl',
    //钝化处理
    S_DHCL: 'dhcl',
    //充装前抽空置换
    S_CZQCKZH: 'czqckzh',
    //抽空置换
    S_CKZH: 'ckzh',
    //已水压接收
    S_YSYJS: 'ysyjs',
    //已水压确认
    S_SYYQR: 'ysyqr',
};

export const CONFIG_STEP = {
    // 物料回收汇出前录入
    C_WLHSHCQ: 'wlhshcq',

    // 物料回收汇出后录入
    C_WLHSHCH: 'wlhshch',

    // 物料回收汇入前录入
    C_WLHSHRQ: 'wlhshrq',

    // 物料回收汇入后录入
    C_WLHSHRH: 'wlhshrh',
};

interface phaseType {
    [key: string]: string;
}
/**
 * 阶段-中文
 * @type {{
 * phase_chdj: string,
 * phase_chfj: string,
 * phase_cjhj: string,
 * phase_njrc: string,
 * phase_gpcl: string,
 * phase_cqdj: string,
 * phase_cpck: string,
 * phase_hprc: string,
 * phase_wxrc: string,
 * phase_cpfx: string,
 * phase_xprc: string,
 * phase_njcc: string,
 * phase_yqfx: string,
 * phase_bhgcz: string,
 * phase_gpzs: string,
 * phase_cpbz: string,
 * phase_cprk: string,
 * phase_wxcc: string,
 * phase_njcl: string,
 * phase_thrc: string,
 * phase_sffx: string}}
 */
export const PHASE_TYPE_CHINESE: phaseType = {
    /**
     * 新瓶入厂
     */
    phase_xprc: '新瓶入厂',
    /**
     * 充前登记
     */
    phase_cqdj: '充前登记',
    /**
     * 充后登记
     */
    phase_chdj: '充后登记',
    /**
     * 充后回放
     */
    phase_chhf: '充后回放',
    /**
     * 成品分析
     */
    phase_cpfx: '成品分析',
    /**
     * 充后复检
     */
    phase_chfj: '充后复检',
    /**
     * 维修出厂
     */
    phase_wxcc: '维修出厂',
    /**
     * 年检出厂
     */
    phase_njcc: '年检出厂',
    /**
     * 余气分析
     */
    phase_yqfx: '余气分析',
    /**
     * 钢瓶处理
     */
    phase_gpcl: '钢瓶处理',
    /**
     * 成品出库
     */
    phase_cpck: '成品出库',
    /**
     * 成品包装
     */
    phase_cpbz: '成品包装',
    /**
     * 回瓶入厂
     */
    phase_hprc: '回瓶入厂',
    /**
     * 退货入厂
     */
    phase_thrc: '退货入厂',
    /**
     * 维修入厂
     */
    phase_wxrc: '维修入厂',
    /**
     * 年检入厂
     */
    phase_njrc: '年检入厂',
    /**
     * 成品入库
     */
    phase_cprk: '成品入库',
    /**
     * 水分分析
     */
    phase_sffx: '水分分析',
    /**
     * 车间氦检
     */
    phase_cjhj: '车间氦检',
    /**
     * 钢瓶再生
     */
    phase_gpzs: '钢瓶再生',
    /**
     * 不合格处置
     */
    phase_bhgcz: '不合格处置',
    /**
     * 年检前处理
     */
    phase_njcl: '年检前处理',
};

/**
 * form表单公共配置项
 // eslint-disable-next-line max-len
 * @type {[{title: string},
 * {component: string, model: string, disabled: boolean, label: string, placeholder: string},
 * {component: string, model: string, disabled: boolean, label: string, placeholder: string},
 * {component: string, model: string, disabled: boolean, label: string, placeholder: string},
 * {component: string, model: string, disabled: boolean, label: string, placeholder: string},
 * null,null,null]}
 */
export const FORM_CONFIG = [
    { title: '基本信息' },
    {
        model: 'cylinderCode',
        component: 'input',
        label: '条码号',
        disabled: true,
        placeholder: '扫码后自动显示',
    },
    {
        model: 'cylinderNum',
        component: 'input',
        label: '钢瓶编号',
        disabled: true,
        placeholder: '根据档案自动展示',
    },
    {
        model: 'cylinderTypeLabel',
        component: 'input',
        label: '钢瓶类型',
        disabled: true,
        placeholder: '根据档案自动展示',
    },
    {
        model: 'containerSpecificationLabel',
        component: 'input',
        label: '容器规格',
        disabled: true,
        placeholder: '根据档案自动展示',
    },
    {
        model: 'productIdLabel',
        component: 'input',
        label: '充装介质',
        disabled: true,
        placeholder: '根据档案自动展示',
    },
    {
        model: 'valveTypeLabel',
        component: 'input',
        label: '瓶阀型号',
        disabled: true,
        placeholder: '根据档案自动展示',
    },
    {
        model: 'nextInspectionDate',
        component: 'input',
        label: '下次年检日期',
        disabled: true,
        placeholder: '根据档案自动展示',
        slots: {
            name: 'suffix',
            type: 'tag',
            tagText: YEAR_INSPECT,
            tagType: TAG_TYPE,
            value: 'nextInspectionDateLabel',
        },
    },
];

/**
 * 表单项数据
 * @type {{
 * cylinderType: string,
 * valveTypeLabel: string,
 * lastPhase: string,
 * cylinderId: string,
 * containerSpecification: string,
 * containerSpecificationLabel: string,
 * productId: string, orderId: string,
 * cylinderNum: string,
 * cylinderCode: string,
 * processProperties: string,
 * valveUseTimes: string,
 * transferPhaseId: string,
 * transferRecordId: string,
 * nextInspectionDateLabel: number,
 * nextInspectionDate: string,
 * lastCustomerIdLabel: string,
 * currentPhase: string,
 * lastCustomerId: string,
 * cylinderTypeLabel: string,
 * valveType: string,
 * productIdLabel: string
 * }}
 */
export const FORM = {
    // 钢瓶id
    cylinderId: '',
    // 条码号
    cylinderCode: '',
    // 钢瓶编号
    cylinderNum: '',
    // 钢瓶类型
    cylinderType: '',
    cylinderTypeLabel: '',
    // 容器规格
    containerSpecification: '',
    containerSpecificationLabel: '',
    // 充装介质（产品名称）
    productId: '',
    productIdLabel: '',
    // 阀门型号
    valveType: '',
    valveTypeLabel: '',
    // 下次年检日期
    nextInspectionDate: '',
    nextInspectionDateLabel: 1,
    // 流程属性名称
    processProperties: '',
    // 所属阶段
    currentPhase: '',
    // 阶段id
    transferPhaseId: '',
    // 流程id
    transferRecordId: '',
    // 瓶阀使用次数
    valveUseTimes: '',
    // 订单id
    orderId: '',
    // 上个阶段
    lastPhase: '',
    // 上家客户名称
    lastCustomerId: '',
    lastCustomerIdLabel: '',
};

/**
 * 是否单选框内容
 * @type {[{name: string, label: string},{name: string, label: string}]}
 */
export const WHETHER_RADIO = [
    {
        value: 1,
        text: '是',
    },
    {
        value: 0,
        text: '否',
    },
];

/**
 * 是否单选框内容
 * @type {[{name: string, label: string},{name: string, label: string}]}
 */
export const COMPOUND_NAME = [
    {
        name: 1,
        label: '正常',
    },
    {
        name: 0,
        label: '重量少',
    },
];
/**
 * 项目检查正常异常
 */
export const INSPECT_STATUS = {
    // 1 正常
    NORMAL: 1,
    // '0' 正常
    ABNORMAL: 0,
};

/**
 * 正常、异常单选框
 * @type {value: string | number, label:  string | number}
 */
export const NORMAL_ABNORMAL = [
    {
        value: 1,
        text: '正常',
    },
    {
        value: 2,
        text: '异常',
    },
];

/**
 * 正常、异常单选框 --不合格禁用
 * @type {value: string | number, label:  string | number}
 */
export const NORMAL_ABNORMAL_DISABLED = [
    {
        value: 1,
        text: '正常',
        disable: true,
    },
    {
        value: 0,
        text: '异常',
        disable: true,
    },
];
/**
 * 分析状态、结果
 */
export const ANALYSIS_STATUS = {
    /** 异常 */
    ABNORMAL: 0,
    /** 正常 */
    NORMAL: 1,
};

/**
 * 年检状态
 */
export const YEAR_INSPECT_STATUS = {
    /** 正常 */
    NORMAL: 1,
    /** 异常 */
    ABNORMAL: 2,
    /** 已审核 */
    REVIEWED: 3,
};

// 计算时间差 以分钟为单位
export function minutesTime(dateStart?: unknownType, dateEnd?: unknownType) {
    const dateStart1 = dayjs(dateStart).format('YYYY-MM-DD HH:mm:ss');
    const dateEnd1 = dayjs(dateEnd).format('YYYY-MM-DD HH:mm:ss');

    let begin1 = dateStart1.substr(0, 10).split('-');
    let end1 = dateEnd1.substr(0, 10).split('-');
    //将拆分的数组重新组合，并实例成化新的日期对象
    let date1: unknownType = new Date(begin1[1] + -+begin1[2] + -+begin1[0]);
    let date2: unknownType = new Date(end1[1] + -+end1[2] + -+end1[0]);

    let m = _.toNumber(Math.abs(date2 - date1) / 1000 / 60);

    let min1 = parseInt(dateStart1.substr(11, 2)) * 60 + parseInt(dateStart1.substr(14, 2));
    let min2 = parseInt(dateEnd1.substr(11, 2)) * 60 + parseInt(dateEnd1.substr(14, 2));

    //两个分钟数相减得到时间部分的差值，以分钟为单位
    let n = min2 - min1;
    //将日期和时间两个部分计算出来的差值相加，即得到两个时间相减后的分钟数
    let minutes = m + n;

    return minutes;
}

export function conversionTime(time: string, type?: number) {
    if (time) {
        if (type === 0) {
            // 年月
            return dayjs(time).format('YYYY-MM');
        } else if (type === 1) {
            // 时
            return dayjs(time).format('YYYY-MM-DD HH');
        } else if (type === 2) {
            // 时分
            return dayjs(time).format('YYYY-MM-DD HH:mm');
        } else if (type === 3) {
            // 时分秒
            return dayjs(time).format('YYYY-MM-DD HH:mm:ss');
        } else {
            return time;
        }
    }
}

// 图片剪切
export function pictureCut(images: unknownType) {
    if (_.isArray(images) && images?.length === 0) {
        return false;
    }

    const imageList = _.isArray(images) ? images.join(',') : images?.split(',');

    return imageList?.map((element: unknownType) => {
        // 名称
        const textName = _.split(element, '/');
        // 格式
        const extname = _.split(textName[textName?.length - 1], '.');

        return {
            name: textName[textName?.length - 1],
            extname: extname[extname?.length - 1],
            url: element,
        };
    });
}

/**
 * 扫码是否重复
 * @param tableData 表格数据
 * @param cylinderCode 条码号
 * @param id 表格数据中条码号字段名
 * @returns boolean
 */
export function isRepeatScan(tableData?: unknownType, cylinderCode?: unknownType, id?: string) {
    const repeatedScan = tableData?.map((item: unknownType) => item[`${id}`]).includes(cylinderCode);

    if (repeatedScan) {
        showToast('重复扫码，该条码已存在');
        return false;
    }

    return true;
}

/**
 * eventChannel name
 */
export const EventName = {
    /**
     * 物料调拨
     */
    MaterialTransfer: 'MaterialTransfer',
    /**
     * 库内盘点
     */
    WarehouseInCheck: 'WarehouseInCheck',
    /**
     *  条码信息
     */
    CylinderInfo: 'CylinderInfo',
};
